diff -Nur a/drivers/misc/rf_pm/wifi_pm.c b/drivers/misc/rf_pm/wifi_pm.c
--- a/drivers/misc/rf_pm/wifi_pm.c	2016-06-09 19:33:23.000000000 +0200
+++ b/drivers/misc/rf_pm/wifi_pm.c	2016-10-02 18:43:35.001633433 +0200
@@ -73,18 +73,6 @@
 }
 EXPORT_SYMBOL(wifi_pm_gpio_ctrl);
 
-#ifdef CONFIG_PROC_FS
-static int wifi_pm_power_stat(char *page, char **start, off_t off, int count, int *eof, void *data)
-{
-	char *p = page;
-
-#if defined(CONFIG_ARCH_SUN8IW7P1)
-	p += sprintf(p, "%s", wl_info.wl_power_state ? "0" : "1");
-#else
-	p += sprintf(p, "%s", wl_info.wl_power_state ? "1" : "0");
-#endif
-	return p - page;
-}
 static void scan_device(int onoff)
 {
 	int sdc_id = -1;
@@ -123,16 +111,31 @@
 	}
 }
 
-static int wifi_pm_power_ctrl(struct file *file, const char __user *buffer, unsigned long count, void *data)
+static void wifi_power_ctrl(int power)
 {
-	int power = simple_strtoul(buffer, NULL, 10);
-	power = power ? 1 : 0;
-
 	wifi_pm_power(power);
 	mdelay(100);
-
 	scan_device(power);
 	mdelay(100);
+}
+
+#ifdef CONFIG_PROC_FS
+static int wifi_pm_power_stat(char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+	char *p = page;
+
+#if defined(CONFIG_ARCH_SUN8IW7P1)
+	p += sprintf(p, "%s", wl_info.wl_power_state ? "0" : "1");
+#else
+	p += sprintf(p, "%s", wl_info.wl_power_state ? "1" : "0");
+#endif
+	return p - page;
+}
+
+static int wifi_pm_power_ctrl(struct file *file, const char __user *buffer, unsigned long count, void *data)
+{
+	int power = simple_strtoul(buffer, NULL, 10);
+	wifi_power_ctrl(power ? 1 : 0);
 
 	return sizeof(power);
 }
@@ -264,6 +267,7 @@
 static int __devinit wifi_pm_probe(struct platform_device *pdev)
 {
 	awwifi_procfs_attach();
+	wifi_power_ctrl(1);
 	wifi_pm_msg("wifi gpio init is OK !!\n");
 	return 0;
 }
